/*
 * Copyright 2010,2011 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt.dialog.konfig;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.mnit.basis.daten.konstant.QUALITAET;
import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.struktur.container.Engpass;
import de.mnit.basis.db.zugang.S_DBZugang;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.swt.anw.A_MN_Dialog;
import de.mnit.basis.swt.anw.A_MN_Gruppe;
import de.mnit.basis.swt.element.S_SWT_Komponente;
import de.mnit.basis.swt.element.steuer.SWT_Knopf;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.SWT_Fenster;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.S_Fenster;
import de.mnit.basis.swt.grafik.icon.direkt.ICON;
import de.mnit.basis.swt.layout.LayoutGitter;
import de.mnit.basis.swt.layout.LayoutReiter;
import de.mnit.basis.sys.Ausgabe;
import de.mnit.basis.sys.sprache.S;
import de.mnit.schnipsel.zentral.SC_Bilder;

/**
 * @author Michael Nitsche
 * 05.07.2010	Erstellt
 */
public class K_Konfig extends A_MN_Dialog<K_Konfig,Object> {

	public static void main(String[] args)   { start(K_Konfig.class); }


	private static final S s=new S(K_Konfig.class);

	private final K_KonfigCrypt		k_sicherheit	= new K_KonfigCrypt();
	private final K_KonfigDB		k_db			= new K_KonfigDB();
	private final K_KonfigAllgemein	k_allgemein		= new K_KonfigAllgemein();
	private final K_KonfigSync		k_sync			= new K_KonfigSync();
	private final SWT_Knopf			k_ok			= new SWT_Knopf();
	private final SWT_Knopf			k_abbruch		= new SWT_Knopf();
	private S_KonfigSeite<?>[]		seiten			= new S_KonfigSeite[] { k_allgemein, k_db, k_sicherheit, k_sync };
	private LayoutReiter			reiter;


	// ERSTELLEN

	protected S_DBZugang gErgebnis2() {
		return null;
	}

	protected S_SWT_Komponente<?, ? extends Composite> layout() {
		LayoutReiter reiter=LayoutReiter.neu()
			.nSeite(" "+s.t("Allgemein"), k_allgemein).sBild(ICON._16.OBJ_HAUS).fertig()
			.nSeite(" "+s.t("Daten"), t.k_db).sBild(ICON._16.OBJ_ADRESSBUCH).fertig();

		reiter.nSeite(" "+s.t("Sicherheit"), t.k_sicherheit).sBild(SC_Bilder.gIcon_16_Sicherheit).fertig();

		if(QUALITAET.INSTABIL.ok())
			reiter.nSeite(" "+s.t("Sync"), t.k_sync).sBild(ICON._16.AKTION_AKTUALISIEREN).fertig();

		this.reiter=reiter;

		return LayoutGitter.neu()
			.sSpaltenAnzahl(2)
			.sZwischenraumV(5)
			.sAussenabstand(5)
			.sSpaltenAusgleichen()
			.sKomponente(reiter)
				.sUebergreifendH(2)
				.sFlexibel()
				.fertig()
			.sKomponente(t.k_abbruch)
				.sBreite(100)
				.sPositionH(POSITION_H.LINKS)
				.fertig()
			.sKomponente(t.k_ok)
				.sBreite(100)
				.sPositionH(POSITION_H.RECHTS)
				.fertig()
			;
	}

	protected void initStyle() {
		t.k_ok.sText(s.t("Ok"));
		t.k_abbruch.sText(s.t("Abbruch"));

		t.k_ok.sBild(ICON._16.AKTION_OK);
		t.k_abbruch.sBild(ICON._16.AKTION_ABBRUCH);
	}

	protected void initEvents() {
		t.k_abbruch.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				t.schliessen();
			}
		});

		t.k_ok.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				int aktNr=t.reiter.gSeiteAktuell();
				S_KonfigSeite<?> aktuell=t.seiten[aktNr-1];
				Ausgabe.debug(aktuell.getClass().getName());
				boolean schliessen=aktuell.speichern();
				if(schliessen)
					t.schliessen();
			}
		});

		final Engpass<Integer> letzteNr=Engpass.neu();
		letzteNr.s(1);
		t.k_allgemein.oeffnen();

		t.reiter.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				int aktNr=t.reiter.gSeiteAktuell();
				S_KonfigSeite<?> aktuell=t.seiten[aktNr-1];
				Ausgabe.debug(letzteNr.g(), aktuell);
				boolean ok=aktuell.oeffnen();
				if(letzteNr.g()!=null)
					ok=ok && t.seiten[letzteNr.g()-1].speichern();
				if(!ok) {
					t.reiter.sAktiveSeite(letzteNr.g());
					return;
				}
				letzteNr.s(aktNr);
			}
		});
	}

	protected S_Fenster<?> fenster(A_MN_Gruppe<?> instanz) throws F_Sys_InOut {
		return SWT_Fenster.neu(instanz, false, 450, 250, s.t("Datenbank"),
			ICON._16.WERKZEUG, ICON._24.WERKZEUG, ICON._32.WERKZEUG);
	}

}
